<?php

namespace App\Http\Controllers\Api\gao;

use App\Utils\Service\MongoDB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

class WechatController extends BaseController
{
    //实现自动回复的思路
    //1、关键词回复不写死，从数据库中模糊查询
    //2、对接图灵机器人
    //3、对接ChatGpt

    //定义一个属性用来回复文本消息
    protected $xmlTextSql = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";

    /**
     * 测试连接微信服务器是否成功 并且分别判断get post 请求
     * @param Request $request
     * @return bool
     */
    public function check(Request $request)
    {
        //当微信服务器中返回的是get请求
        if ($request->isMethod('GET')) {
            $signature = $request->get('signature');
            $timestamp = $request->get('timestamp');
            $nonce = $request->get('nonce');
            $tmpArr = array('gao', $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode($tmpArr);
            $tmpStr = sha1($tmpStr);
            if ($tmpStr == $signature) {
                echo $request->get('echostr');
                die();
            } else {
                return false;
            }
        }
        //当微信服务器中返回的是post请求
        if ($request->isMethod('POST')) {
            //因为微信服务器的请求是异步请求，直接打印不出来，所以把请求的数据都存入缓存中
            //如果是post请求 微信服务器传过来的数据是xml 获取请求原始数据流
            $xmlData = file_get_contents("php://input");
            Cache::put('gao', $xmlData);
            //原始的数据流传递到将xml文件转为数组的方法当中
            $data = $this->xmlToArray($xmlData);
            //判断微信服务器传递过来的参数里的MsgType为什么类型 然后选择返回类型
            switch ($data['MsgType']) {
                //固定回话
                case 'text':
                {
                    //因为MsgType为text类型 所以返回到replyText方法当中
                    $this->replyText($data);
                }
                case 'event':
                {
                    //因为MsgType为类型event 所以返回到replyEvent方法当中
                    $this->replyEvent($data);
                }

            }
        }
    }
    /**
     * 接收微信服务器传递过来的信息
     */
    public function getsession()
    {
        $xml = Cache::get('gao');
        $data = $this->xmlToArray($xml);
        print_r($data);
        die();
    }

    /**
     * 把xml格式的数据转换为数组
     * @param string $xml
     * @return array
     */
    public function xmlToArray($xml = "")
    {
        return (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    }
    /**
     * 关注自动回复
     * @param $data
     */
    public function replyEvent($data)
    {
        if ($data['Event'] == 'subscribe') {
            $replyXml = sprintf($this->xmlTextSql, $data['FromUserName'], $data['ToUserName'], time(), '你终于关注我啦！！');
            echo $replyXml;
            die();
        }
    }


    /**
     * 获取access_token
     */
    public function getAccessToken(){
        $sql="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
        $appid="wx4c4f4c5c397a8ad7";
        $secret="0b0f266bc72327bbf5e723a597bc93fa";
        $curl=sprintf($sql,$appid,$secret);
        $curl=file_get_contents($curl);
        $curl=json_decode($curl,true);
        $token=$curl['access_token'];
        return $token;
    }

    /**
     * 固定文本自动回复
     */
    public function replyText($data)
    {

        MongoDB::insertOne(['content' => $data['Content']]);

//        if ($data['Content'] == '你好') {
//            $content = '你谁？';
//        } elseif ($data['Content'] == '你谁') {
//            $content = '你管我？';
//        }
//        //填写参数
//        $sql = sprintf($this->xmlTextSql, $data['FromUserName'], $data['ToUserName'], time(), $content);
//        //进行输出
//        echo $sql;
//        die();

    }

}














